﻿using Microsoft.CodeAnalysis.Text;
using Microsoft.CodeAnalysis;
using System;
using System.Text;
using System.Linq;
using System.Diagnostics;

namespace SourceGeneratorXmlMethod
{
    [Generator]
    public class SourceGeneratorXmlGenerator : ISourceGenerator
    {
        public void Initialize(GeneratorInitializationContext context) { }

        public void Execute(GeneratorExecutionContext context)
        {
            // 编译的时候弹出调试工具
            //Debugger.Launch();
            // 获得查找格式为xml的文件（控制台命令的文件列表）
            var myFiles = context.AdditionalFiles.Where(at => at.Path.EndsWith(".xml"));
            foreach (var file in myFiles)
            {
                // 获得xml的文件信息
                var content = file.GetText(context.CancellationToken);
                // 获得xml中的信息
                String codes = content.ToString();
                // 主要为演示，只是去掉了node标签
                codes = codes.Replace("<root>", "").Replace("</root>", "");
                // 动态编译
                context.AddSource($"generated.cs", SourceText.From(codes, Encoding.UTF8));
            }
        }
    }
}
